// Magic Software, Inc.
// http://www.magic-software.com
// Copyright (c) 2000, All Rights Reserved
//
// Source code from Magic Software is supplied under the terms of a license
// agreement and may not be copied or disclosed except in accordance with the
// terms of that agreement.  The various license agreements may be found at
// the Magic Software web site.  This file is subject to the license
//
// RESTRICTED USE SOURCE CODE
// http://www.magic-software.com/License/restricted.pdf

#ifndef MGCFOGSTATE_H
#define MGCFOGSTATE_H

#include "MgcColor.h"
#include "MgcRenderState.h"
MgcSmartPointer(MgcFogState);


class MgcFogState : public MgcRenderState
{
    MgcDeclareDefaultState(MgcFogState);
    MgcDeclareRTTI;
    MgcDeclareStream;

public:
    MgcFogState ();
    virtual Type GetType () const;


    bool& Enabled ();
    MgcReal& Start ();
    MgcReal& End ();
    MgcReal& Density ();
    MgcColor& Color ();

    enum DensityFunction
    {
        DF_LINEAR,
        DF_EXP,
        DF_EXPSQR,
        DF_QUANTITY
    };

    DensityFunction& DFunction ();

    enum ApplyFunction
    {
        AF_PER_VERTEX,
        AF_PER_PIXEL,
        AF_QUANTITY
    };

    ApplyFunction& AFunction ();

protected:
    bool m_bEnabled;
    MgcReal m_fStart, m_fEnd, m_fDensity;
    MgcColor m_kColor;
    DensityFunction m_eDFunction;
    ApplyFunction m_eAFunction;
};

MgcRegisterStream(MgcFogState);
#include "MgcFogState.inl"

#endif
